Package and Package

Package

什么是包

存储在硬盘上的都是二进制,和 TCP 数据包一样,在头标记了吧。
怎么分辨是什么?

什么是文件?

是怎么安装的,

包头包尾,文件头文件尾

源码只有编译后才能进行安装

安装,

对黑盒的

包和包管理器这两个概念主要存在于类 Unix 系统中,Windows 环境下的相关名词大概就是安装包。中文的打包目的是为了移动,Package 就是一种分发单元。安装包就是包也是 Linux 下的软件包,应用中心相当于图形化的包管理器。

常见的安装包格式

Debian 系的比如 Debian、Ubuntu 的安装包(软件包) deb 后缀
Red Hat 系的 RHEL、CentOS、Fedora 用 rpm
macOS 使用 dmg、pkg
Windows 使用 exe、msi

为什么大多数 Mac 软件都要放在 dmg 文件里? - 知乎
有个问题是为什么不用压缩包,它们的区别是?
包为什么是整体?开头和结尾吧,开头和结尾的字节区分。

mac 的应用扩展名为 .app,不是一整个文件,本质是一个目录
dmg 是一种打包

现象:打开 dmg 文件弹出提示拖动窗口的同时,会在桌面出现一个挂载磁盘。

Package Manager

What is a Package Manager in Linux?

常见的包管理器

本文就是因为知道了 macOS 的 Homebrew 这个包管理器才打通了概念,macOS 上的软件安装方式有像应用市场的 App Store 也有 Windows 上的下载安装包安装,以及通过包管理 Homebrew 安装。
既然包管理器类似应用市场,那自然一个系统可以使用不同的包管理器,比如 Debian 主要用 APT(Advanced Package Tool)、DPKG(Debian Package Manager)。
而之前玩华硕路由器接触的 Entware 是 software repository,OPKG 是包管理器。

比如在写这个包管理器的时候,最好去试试体验体验。

Homebrew

Homebrew 使用详解
brew(1) – The Missing Package Manager for macOS (or Linux) — Homebrew Documentation
Homebrew 安装及常用命令速查
Homebrew 升级 4.0.0,麦金塔上的啤酒会更香吗? - 少数派

有一个统一的管理必然是好事,但是有些软件“跳出 Store 外,不在 Brew 中”,我知道 Homebrew 时已经使用了电脑一段时间,各个来源的安装都有,已经混乱没法实现统一管理了,同时 homebrew 的教程都没有解释 GUI 应用的路径

通过 macOS application bundles 安装(即安装包安装)的,是不是用 homebrew 问题不大,在 Applications 文件夹里能看到图标也能通过卸载软件清理卸载,但是 CLI 工具只能通过 homebrew 了,可以说是必装了。

Mac uninstall Node.js

用 PicGo 的时候用安装包安装了 node.js,但它是命令行工具,卸载就比较麻烦,App Cleaner 搜不到:

sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}
sudo npm uninstall npm -g
sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.*
sudo rm -rf /usr/local/include/node /Users/$USER/.npm
sudo rm /usr/local/bin/node
sudo rm /usr/local/share/man/man1/node.1
sudo rm /usr/local/lib/dtrace/node.d

Install Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

/bin/bash -c 使用 /bin/bash 作为解释器来运行续紧随其后的命令字符串
$(...) 命令替换 Command Substitution。先执行括号内的命令,并将输出作为字符串返回。
curl -fsSL 从 URL 下载内容,并且 -f 失败时不显示 HTTP 错误页面,-s 静默模式隐藏进度条和错误信息,-S 显示错误信息,-L 跟踪重定向。

本来想用 homebrew 安装 git,但 homebrew 本身就需要 git,所以在安装 homebrew 的时候就会自动安装 Command Line Tools(包含 git)。

Installs

安装 CLI 工具使用命令 brew install ***,Homebrew installs packages to their own directory and then symlinks their files into /opt/homebrew (on Apple Silicon).

GUI 工具使用 brew install --cask *** ,和使用安装包安装一样会安装在 /Applications/

Homebrew Cask

可以视 Homebrew Cask 为另一个专门安装 GUI macOS applications 的工具了,参考 GitHub - Homebrew/homebrew-cask: 🍻 A CLI workflow for the administration of macOS applications distributed as binaries 上的

$ brew install alfred
==> Downloading https://cachefly.alfredapp.com/Alfred_4.2.1_1187.dmg
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'alfred'.
==> Installing Cask alfred
==> Moving App 'Alfred 4.app' to '/Applications/Alfred 4.app'.
🍺  alfred was successfully installed!

可见 GUI 应用的安装并没有比拖拽 icon 多步骤。

brew install:安装历史版本库-CSDN博客

History

之前在网上查找如何用 homebrew 安装 mpv 有教程为:

  1. brew install mpv --with-bundle 自定义安装选项 --with-bundle 选项的意义是打包为 .app,Remove all options from Homebrew/homebrew-core formulae · Issue #31510 · Homebrew/homebrew-core · GitHub
  2. brew linkapps mpv 将打包的 .app 文件链接到 /Applications 目录,Deprecate brew (un)linkapps. by MikeMcQuaid · Pull Request #1808 · Homebrew/brew · GitHub
    两条组合命令都废弃了哦。

Upgrade

brew cask upgrade 显示没有要更新的 - V2EX

brew <command> --cask

Uninstall

我用以下方法证明了 如果用 homebrew 装软件,就卸载不干净了?

能理解不应该电子洁癖,但推荐 homebrew 的口号是彻底清理却没人告知 brew uninstall 会有残留的?Method 中没仔细用过就推荐的含量还在提升,自己掌控。

Stanza: zap 有写,zap 代码块 cask 的相关文件,卸载时添加 --zap 即可,brew uninstall --zap

依赖管理
brew deps --tree --installed
brew autoremove